﻿using System;
using System.Collections.Generic;

using System.Text;

namespace Rance.Battle
{
    class 征兵令1 : 主动技能
    {
        public 征兵令1()
        {
            this.技能速度 = 140;
            this.技能目标 = Battle.技能目标.己方任一;
            this.消耗行动点 = Battle.消耗行动点.一点;
            this.技能站位要求 = Battle.技能站位要求.无;
        }

        public int 系数 = 8;
        public decimal 兵力系数 = 0.2m;

        public override void Excute(技能环境 环境)
        {
            base.Excute(环境);

            int 回复量 = Convert.ToInt32(环境.施放者.兵力 * 兵力系数 + 环境.施放者.实际智 * 系数);
            var 医仙降临 = 环境.施放者.Find效果(typeof(医仙降临效果));
            if (医仙降临 != null)
            {
                回复量 *= 2;
                医仙降临.是否执行 = true;
            }

            var 角色 = 环境.目标List[0];
            var temp = 角色.最大兵力 - 角色.兵力;
            if (temp > 回复量)
                temp = 回复量;
            角色.兵力 += temp;

            恢复Behavior behavior = new 恢复Behavior();
            behavior.List.Add(new 恢复BehaviorDetail() { 角色 = new 角色Struct { ID = 角色.ID, Name = 角色.Name }, 恢复量 = temp });
            环境.行动结果.ResultList.Add(behavior);

        }
    }


    class 征兵令2 : 征兵令1
    {
        public 征兵令2()
        {
            this.兵力系数 = 0.4m;
            this.系数 = 10;
        }
    }

    class 高级征兵令 : 准备技能
    {
        public 高级征兵令()
        {
            this.技能速度 = 80;
            this.技能目标 = Battle.技能目标.己方全体;
            this.消耗行动点 = Battle.消耗行动点.两点;
            this.准备后执行技能 = new 高级征兵令后();
            this.技能站位要求 = Battle.技能站位要求.无;
        }
    }

    class 高级征兵令后 : 准备后主动技能
    {
        public int 系数 = 8;
        public decimal 兵力系数 = 0.5m;


        public 高级征兵令后()
        {
            this.技能速度 = 160;
            this.消耗行动点 = Battle.消耗行动点.无消耗;
            this.技能站位要求 = Battle.技能站位要求.无;

            this.系数 = 10;
            this.兵力系数 = 0.4m;
        }

        public override void Excute(技能环境 环境)
        {
            base.Excute(环境);

            int 回复量 = Convert.ToInt32(环境.施放者.兵力 * 兵力系数 + 环境.施放者.实际智 * 系数);
            var 医仙降临 = 环境.施放者.Find效果(typeof(医仙降临效果));
            if (医仙降临 != null)
            {
                回复量 *= 2;
                医仙降临.是否执行 = true;
            }

            恢复Behavior behavior = new 恢复Behavior();
            
            环境.行动结果.ResultList.Add(behavior);

            foreach (var 角色 in 环境.目标List)
            {
                if (角色.是否败退)
                    continue;

                var temp = 环境.施放者.最大兵力 - 环境.施放者.兵力;
                if (temp > 回复量)
                    temp = 回复量;
                环境.施放者.兵力 += temp;

                behavior.List.Add(new 恢复BehaviorDetail() { 角色 = new 角色Struct() { ID = 角色.ID, Name = 角色.Name }, 恢复量 = temp });
            }

        }
    }
}
